<!--
 * 金额
 * @作者: 陈老师儿~
 * @手机: 18560000860
 -->
<template>
    <view class="pure-amount" :class="classes" :style="styles">
        <!-- 货币符号 -->
        <text class="pure-amount-currency" v-if="currency">{{ currency }}</text>

        <!-- 金额 -->
        <text class="pure-amount-amount pure-amount-amount-int">{{ intNum }}</text>
        <text class="pure-amount-amount pure-amount-amount-dot" v-if="floatNum !== ''">.</text>
        <text class="pure-amount-amount pure-amount-amount-float" v-if="floatNum !== ''">{{ floatNum }}</text>
    </view>
</template>

<script>
    import props from "./props.js";
    export default {
        options: {
            // 将自定义节点设置成虚拟的
            // 头条、飞书：因为合并后丢失事件和 'provide/inject'
            // 京东：因为合并后不能合并外层 'class'
            // 百度：因为合并后会在控制台疯狂报警告
            // #ifndef MP-TOUTIAO || MP-LARK || MP-JD || MP-BAIDU
            virtualHost: true,
            // #endif

            // 组件样式隔离
            styleIsolation: "apply-shared",

            // 允许使用多个插槽
            multipleSlots: true,
        },
        props: props,
        computed: {
            // classes
            classes() {
                const classes = [];
                return classes;
            },

            // styles
            styles() {
                const styles = [];
                return styles;
            },

            // 整数部分
            intNum() {
                const intStr = this.amount.toString().split(".")[0] || "";

                // 增加千分位符号
                if (this.thousands) {
                    return intStr.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
                }
                return intStr;
            },

            // 小数部分
            floatNum() {
                let floatStr = this.amount.toString().split(".")[1] || "";

                // 精度
                let precision = this.precision;

                // 小数点后的位数 < 精度
                if (floatStr.length < precision) {
                    // 不需要补零
                    if (!this.padZero) {
                        // 舍弃小数点后的零
                        if (this.dropZero) return this.floatTrimZero(floatStr);

                        // 不舍弃小数点后的零
                        return floatStr;
                    }

                    // 需要补零
                    return this.floatPadZero(floatStr, precision);
                }

                // 小数点后的位数 > 精度
                floatStr = floatStr.slice(0, precision);

                // 舍弃小数点后的零
                if (this.dropZero) return this.floatTrimZero(floatStr);

                // 不舍弃小数点后的零
                return floatStr;
            },
        },
        methods: {
            // 末尾补零
            // len: 需要到的长度
            floatPadZero(num, len) {
                return num.toString().padEnd(len, "0");
            },

            // 舍弃小数点后的零
            floatTrimZero(num) {
                return num.toString().replace(/\.?0+$/, "");
            },
        },
    };
</script>

<style scoped>
    @import "./style.css";
</style>
